package com.xw.hchat.service;

import com.xw.hchat.pojo.TbUser;
import com.xw.hchat.pojo.vo.User;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @InterfaceName UserService
 * @Author liu zhiyong
 * @Date 2020/8/17 17:56
 * @Version 1.0
 */
public interface UserService {
    /**
     * 返回数据库中的所有用户
     * @Author liu zhiyong
     * @Date 2020/8/17 17:58
     * @Version 1.0
     * @param  
     * @return java.util.List<com.xw.hchat.pojo.TbUser> 
     **/
    List<TbUser> findAll();

    /**
     * 登录
     * @Author liu zhiyong
     * @Date 2020/8/18 9:35
     * @Version 1.0
     * @param username  用户名
     * @param password  密码
     * @return com.xw.hchat.pojo.vo.User 如果登录成功返回用户对象，否则返回null
     **/
    User login(String username, String password);

    /**
     * 注册用户，将用户信息保存到数据库中
     * 如果抛出异常，注册失败。否则注册成功
     * @Author liu zhiyong
     * @Date 2020/8/18 10:34
     * @Version 1.0
     * @param user  用户信息
     * @return void
     **/
    void register(TbUser user);

    /**
     * 上传头像
     * @Author liu zhiyong
     * @Date 2020/8/18 14:07
     * @Version 1.0
     * @param file  客户端上传的文件
     * @param userid    用户id
     * @return com.xw.hchat.pojo.vo.User 如果上传成功返回用户信息，否则返回null
     **/
    User upload(MultipartFile file, String userid);

    /**
     *  更新昵称
     * @Author liu zhiyong
     * @Date 2020/8/18 16:36
     * @Version 1.0
     * @param id    用户id
     * @param nickname  昵称
     * @return void 
     **/
    void updateNickname(String id, String nickname);

    /**
     * 根据用户id查找用户信息
     * @Author liu zhiyong
     * @Date 2020/8/18 16:41
     * @Version 1.0
     * @param userid
     * @return com.xw.hchat.pojo.vo.User
     **/
    User findById(String userid);

    /**
     * 好友搜索（根据用户名搜索用户）
     * 搜索的时候不做校验
     * @Author liu zhiyong
     * @Date 2020/8/18 17:51
     * @Version 1.0
     * @param userid    当前用户id
     * @param friendUsername    好友用户名
     * @return com.xw.hchat.pojo.vo.User 如果搜索到好友，则返回该用户对象，否则为空
     **/
    User findByUsername(String userid, String friendUsername);
}
